<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>name属性</title>
</head>
<body>
  <script>
  /*
  * name属性
  * 1. 函数的name属性，返回该函数的函数名
  * 2. 在匿名函数中,ES5 的name属性，会返回空字符串，而 ES6 的name属性会返回实际的函数名。
  * 3. 在具名函数中， ES5 和 ES6 的name属性都返回这个具名函数原本的名字
  * 4. 在Function构造函数返回的函数实例中，name属性的值为anonymous
  * 5. bind返回的函数，name上会加上bound前缀
  */

  // 匿名函数
  var f = function(){}
  console.log(f.name) // ES5 ''
  console.log(f.name) // ES6 f

  // 具名函数
  const bar = function foo(){}
  console.log(bar.name) // foo

  // 构造函数
  console.log((new Function).name) //anonymous

  // bind
  function foo () {}
  console.log(foo.bind({}).name) //bound foo
  console.log((function(){}).bind({}).name) //bound
  </script>
</body>
</html>